<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    const data = [
      { id: "01", name: "张大大", pid: "", job: "项目经理" },
      { id: "02", name: "小亮", pid: "01", job: "产品leader" }
    ]

    // 完成代码
    function arrToTree(data, rootValue) {
      // 声明一个最终需要返回的数据结构数据
      const treeData = []

      data.forEach(item => {
        // 判断每一项的 pid 是否等于传入的 rootValue
        if (item.pid === rootValue) {
          // 开始调用自己本身
          // 第一个参数：是和整个数组的每一项进行对比
          // 第二个参数：传入当前遍历这一项的 id
          // 如果找到子节点，就返回数组
          const children = arrToTree(data, item.id)

          // 开始判断 children 的长度
          // 如果如果长度不为 0 ，说明有值
          if (children.length) {
            item.children = children
          }

          // 最终将 item 传入到 treeData 即可
          treeData.push(item)
        }
      })

      return treeData
    }

    // 第一个参数：需要格式化的扁平数据
    // 第二个参数：顶级的 pid
    const res = arrToTree(data, '')
    console.log(res)
  </script>
</body>

</html>